﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using TOAcademias;
using System.Data.Linq.SqlClient;

namespace DAOAcademias
{

    /*************************************
    Autor: Carlos Sánchez
    Fecha de Creación: 06/02/2011
    Descripción de la Funcionalidad: Clase que contiene metodos que serviran para dar
    soporte a los registros de la entidad Asistencia.
    **************************************/    
    
    public class DOAsistencia
    {

        DBModuloAcademiasDataContext dbml;

          public DOAsistencia()
        {
            dbml = new DBModuloAcademiasDataContext();
        }

        public List<TOAsistencia> obtenerAsistencia()
        {

            List<TOAsistencia> listaAsistencias = new List<TOAsistencia>();

            
            
            var asistencias = (from asis in dbml.ASISTENCIAs
                           select asis
                             ) ;

            foreach (var asistencia in asistencias) {

                TOAsistencia toAsistencia = new TOAsistencia();
                toAsistencia.Clase = asistencia.COD_CLASE;
                toAsistencia.Socio = asistencia.COD_SOCIO;
                toAsistencia.Estado = asistencia.ESTADO;

                listaAsistencias.Add(toAsistencia);
            
            }

            return listaAsistencias;
        }

        public List<TOAsistencia> obtenerAsistenciaxSeccion(String CodigoSeccion)
        {

            List<TOAsistencia> listaAsistencias = new List<TOAsistencia>();

            var asistencias = (from soc in dbml.SOCIOs
                               join mat in dbml.MATRICULAs
                               on soc.COD_SOCIO equals mat.COD_SOCIO
                               join matsec in dbml.MATRICULA_SECCIONs
                               on mat.COD_MATRICULA equals matsec.COD_MATRICULA
                               join sec in dbml.SECCIONs
                               on matsec.COD_SECCION equals sec.COD_SECCION
                               join cla in dbml.CLASESs
                               on sec.COD_SECCION equals cla.COD_SECCION
                               where matsec.COD_SECCION == CodigoSeccion                                
                               select new { soc.COD_SOCIO,soc.NOM_SOCIO,cla.COD_CLASE }
                             );
            
            foreach (var asistencia in asistencias)
            {
                TOAsistencia toAsistencia = new TOAsistencia();
                toAsistencia.Clase = asistencia.COD_CLASE;
                toAsistencia.Socio = asistencia.COD_SOCIO;
                toAsistencia.NombreSocio = asistencia.NOM_SOCIO;                

                listaAsistencias.Add(toAsistencia);
            }

            return listaAsistencias;
        }

        public List<TOAsistencia> obtenerAsistenciaxSeccionConFecha(String CodigoSeccion)
        {

            List<TOAsistencia> listaAsistencias = new List<TOAsistencia>();

            var asistencias = (from soc in dbml.SOCIOs
                               join mat in dbml.MATRICULAs
                               on soc.COD_SOCIO equals mat.COD_SOCIO
                               join matsec in dbml.MATRICULA_SECCIONs
                               on mat.COD_MATRICULA equals matsec.COD_MATRICULA
                               join sec in dbml.SECCIONs
                               on matsec.COD_SECCION equals sec.COD_SECCION
                               join cla in dbml.CLASESs
                               on sec.COD_SECCION equals cla.COD_SECCION
                               where sec.COD_SECCION == CodigoSeccion
                               && SqlMethods.DateDiffDay(cla.FEC_CLASE, DateTime.Today) == 0
                               select new { cla.COD_CLASE, soc.COD_SOCIO, soc.NOM_SOCIO }
                             );

            foreach (var asistencia in asistencias)
            {


                TOAsistencia toAsistencia = new TOAsistencia();
                toAsistencia.Clase = asistencia.COD_CLASE;
                toAsistencia.Socio = asistencia.COD_SOCIO;
                toAsistencia.NombreSocio = asistencia.NOM_SOCIO;
                toAsistencia.Estado = obtenerEstadoAsistencia(toAsistencia);

                listaAsistencias.Add(toAsistencia);
            }

            return listaAsistencias;
        }

        public String obtenerEstadoAsistencia(TOAsistencia toAsistencia)
        {
            String strEstado = "false";

            var asistencias = (from asis in dbml.ASISTENCIAs
                               where asis.COD_CLASE == toAsistencia.Clase && asis.COD_SOCIO == toAsistencia.Socio
                               select asis
                             );

            if (asistencias.Count() > 0)
            {
                foreach (var asistencia in asistencias)
                {
                    strEstado = asistencia.ESTADO;
                }
            }

            return strEstado;
            
        }

        public Boolean validarExisteAsistencia(TOAsistencia toAsistencia)
        {

            var asistencias = (from asis in dbml.ASISTENCIAs
                               where asis.COD_CLASE == toAsistencia.Clase && asis.COD_SOCIO == toAsistencia.Socio
                               select asis
                             );

            if (asistencias.Count() > 0)
                return true;
            else
                return false;

        }

        public void grabarAsistencia(TOAsistencia toAsistencia)
        {
            if (!validarExisteAsistencia(toAsistencia))
            {
                insertarAsistencia(toAsistencia);
            }
            else
            {
                modificarAsistencia(toAsistencia);
            }
        
        }



        public void insertarAsistencia(TOAsistencia toAsistencia)
        {

            ASISTENCIA asis = new ASISTENCIA();
            asis.COD_CLASE= toAsistencia.Clase;
            asis.COD_SOCIO = toAsistencia.Socio;
            asis.ESTADO = toAsistencia.Estado;

            dbml.ASISTENCIAs.InsertOnSubmit(asis);
            dbml.SubmitChanges();


        }

        public void modificarAsistencia(TOAsistencia toAsistencia)
        {
            var asistencia = (from asis in dbml.ASISTENCIAs
                            where asis.COD_CLASE == toAsistencia.Clase && asis.COD_SOCIO == toAsistencia.Socio
                            select asis).Single();

            asistencia.COD_CLASE = toAsistencia.Clase;
            asistencia.COD_SOCIO = toAsistencia.Socio;
            asistencia.ESTADO = toAsistencia.Estado;

            dbml.SubmitChanges();

        }


    }
}
